/**
 * 格式化日期时间
 * @param {String|Date} date 日期对象或日期字符串
 * @param {String} format 格式化模式，默认为'YYYY-MM-DD HH:mm:ss'
 * @returns {String} 格式化后的日期字符串
 */
export function formatDateTime(date, format = 'YYYY-MM-DD HH:mm:ss') {
  if (!date) return '';
  
  const d = new Date(date);
  
  // 检查日期是否有效
  if (isNaN(d.getTime())) {
    return '';
  }
  
  const year = d.getFullYear();
  const month = padZero(d.getMonth() + 1);
  const day = padZero(d.getDate());
  const hours = padZero(d.getHours());
  const minutes = padZero(d.getMinutes());
  const seconds = padZero(d.getSeconds());
  
  return format
    .replace('YYYY', year)
    .replace('MM', month)
    .replace('DD', day)
    .replace('HH', hours)
    .replace('mm', minutes)
    .replace('ss', seconds);
}

/**
 * 格式化日期
 * @param {String|Date} date 日期对象或日期字符串
 * @returns {String} 格式化后的日期字符串 YYYY-MM-DD
 */
export function formatDate(date) {
  return formatDateTime(date, 'YYYY-MM-DD');
}

/**
 * 格式化时间
 * @param {String|Date} date 日期对象或日期字符串
 * @returns {String} 格式化后的时间字符串 HH:mm:ss
 */
export function formatTime(date) {
  return formatDateTime(date, 'HH:mm:ss');
}

/**
 * 数字补零
 * @param {Number} num 数字
 * @returns {String} 补零后的字符串
 */
function padZero(num) {
  return num < 10 ? '0' + num : num;
}

/**
 * 获取明天的日期对象
 * @returns {Date} 明天的日期对象
 */
export function getTomorrow() {
  const tomorrow = new Date();
  tomorrow.setDate(tomorrow.getDate() + 1);
  return tomorrow;
}

/**
 * 获取一周后的日期对象
 * @returns {Date} 一周后的日期对象
 */
export function getNextWeek() {
  const nextWeek = new Date();
  nextWeek.setDate(nextWeek.getDate() + 7);
  return nextWeek;
}

/**
 * 获取今天开始时间
 * @returns {Date} 今天开始时间 00:00:00
 */
export function getTodayStart() {
  const today = new Date();
  today.setHours(0, 0, 0, 0);
  return today;
}

/**
 * 获取今天结束时间
 * @returns {Date} 今天结束时间 23:59:59
 */
export function getTodayEnd() {
  const today = new Date();
  today.setHours(23, 59, 59, 999);
  return today;
}

/**
 * 判断日期是否是今天
 * @param {String|Date} date 日期对象或日期字符串
 * @returns {Boolean} 是否是今天
 */
export function isToday(date) {
  const d = new Date(date);
  const today = new Date();
  return d.getDate() === today.getDate() && 
         d.getMonth() === today.getMonth() && 
         d.getFullYear() === today.getFullYear();
}

/**
 * 计算两个日期相差的天数
 * @param {String|Date} date1 日期对象或日期字符串
 * @param {String|Date} date2 日期对象或日期字符串
 * @returns {Number} 相差的天数
 */
export function dayDiff(date1, date2) {
  const d1 = new Date(date1);
  const d2 = new Date(date2);
  
  // 将时间设为一天的开始，忽略时分秒的影响
  d1.setHours(0, 0, 0, 0);
  d2.setHours(0, 0, 0, 0);
  
  // 转换为毫秒并计算差值
  const diffTime = Math.abs(d2 - d1);
  return Math.ceil(diffTime / (1000 * 60 * 60 * 24));
} 